(function () {
    // 声明一个对象类型
    type myType = {
        name: string,
        age: number,
    }
    /* type myType = {  // 报错，type无法重复声明同一对象类型
        gender: string,
    } */

    const obj: myType = {
        name: "路飞",
        age: 18,
    }


    /*
        接口：用来定义一个类结构，定义一个类中应该包含哪些属性和方法
            接口也可以当成类型声明去使用（类型声明type只能用一次）
            接口可以重复声明同一对象类型，调用接口使用的是他们的并集
    */
    interface myInterface {
        // 表示定义一个类的结构（对象的结构），必须有两个属性，name和age
        name: string,
        age: number,
    }
    interface myInterface {
        // 表示定义一个类的结构（对象的结构），必须有一个属性，gender
        gender: string,
        // 不能重复定义同一个属性
        // age:string;
    }

    const obj1: myInterface = {
        name: "索隆",
        age: 20,
        gender: "男",
    }

    /* 
        接口可以在定义类的时候限制类的结构
        接口中所有的属性都不能有实际的值
        接口只定义对象的结构，而不考虑实际值
        接口中的方法都是抽象方法

    */
    interface myInter {
        name: string,
        sayHello(): void,
    }
    /* 
        定义类时，可以使用类实现一个接口，实现接口就是使类满足接口的要求
            (接口就相当于对类的限制，满足某些要求，可以在特定场景使用)
    */
    class myClass implements myInter {
        name: string;
        constructor(name: string) {
            this.name = name;
        };
        sayHello(): void {
            console.log("哈哈")
        };

    }



})()